배열의 복사
✒️ 2025-05-27 10:21 내용 수정
1. 얕은 복사(Shallow Copy)
- 배열의 주소값을 그대로 복사하게 되므로, 복사된 두 배열의 주소값이 같다.
- 두 배열의 Stack이 같은 Heap 주소에 연결된다!
- b 배열의 값을 수정하면 a 배열의 내용도 수정되고, 그 반대의 경우도 내용이 둘 다 수정된다.
- 집은 똑같은데 들어가는 문 열쇠 하나 더 복사한 것
int[] a = {1, 2, 3, 4};
int[] b = a;
// a와 b가 보는 배열이 동일한 배열
2. 깊은 복사(Deep Copy)
- 복사된 배열은 원본 배열과 주소값이 다른 아예 다른 객체다.
두 배열의 Stack이 서로 다른 Heap을 가지고, 그 Heap 주소와 연결되어 있다! - 복사된 배열이나 원본 배열이 변경될 때 서로 간의 값은 바뀌지 않는다.
참고 링크 : 코딩팩토리 Java 자바 배열을 복사하는 다양한 방법(깊은 복사, 얕은 복사), TCPSchool 다차원 배열
1) for 문을 써서 일일이 배열 요소를 복사
int[] a = {1, 2, 3, 4};
int[] b = new int[4];
for (int i = 0; i < a.length; i++) {
b[i] = a[i];
}
2) System 클래스의 arraycopy();
int[] a = {1, 2, 3, 4};
int[] b = new int[4];
System.arraycopy(a, 0, b, 0, a.length);
// 복사할 배열의 길이와 위치를 쉽게 설정할 수 있다
3) Array 클래스의 copyOf();
int[] a = {1, 2, 3, 4};
int[] b = Arrays.copyOf(a, a.length);
// Arrays.copyOfRange(a, start_index, end_index); 로 범위설정도 가능하다
4) Object 클래스의 clone();
int[] a = {1, 2, 3, 4};
int[] b = a.clone();
// 얇은 복사와는 다른 a의 동일한 복제본 b가 생긴다
// a와 b의 행렬 주소는 다르다